//package com.baizhi.aspect;
//
//import org.aspectj.lang.JoinPoint;
//import org.aspectj.lang.ProceedingJoinPoint;
//import org.aspectj.lang.annotation.*;
//import org.springframework.context.annotation.Configuration;
//
///**
// * @Configuration 把切面类创建的对象 交给工厂
// *
// * 注解式aop
// *
// * @Aspect 声明当前类为切面类 会自动编织切点和增强
// */
//@Configuration
//@Aspect
//public class TestAop {
//    /**
//     * @Pointcut 声明一个切入点 参数为切点表达式
//     * execution 切方法
//     * @annotation 切注解
//     *
//     * @Pointcut 下的方法可以随便写 不要写具体的方法内容 因为注解需要加在一个方法上  所以需要写一个方法
//     *
//     * 方法名 可以认为是切点的名字
//     */
//    @Pointcut("execution(* com.baizhi.service.*.*(..))")
//    public void testPointCut(){}
//
//    /**
//     * @Before() 前置
//     *     @After() 后置
//     *     @AfterThrowing 异常
//     *     @Around() 环绕
//     *
//     * 参数为切点的名字
//     */
////    @After("testPointCut()")
////    public void testAfter(){
////        System.out.println("执行了后置增强");
////    }
//
//    /**
//     * 环绕增强
//     * 和其它增强有什么区别？
//     * 1.在增强方法中需要对目标方法 执行放行操作
//     *
//     * ProceedingJoinPoint 连接点对象 切点对象（包含切点附近所有的内容 目标方法）
//     */
//    @Around("testPointCut()")
//    public Object testAround(ProceedingJoinPoint joinPoint) throws Throwable {
//        System.out.println("环绕增强 方法执行前");
//
////        执行目标方法 相当于invoke
//        Object proceed = joinPoint.proceed();
//
//        System.out.println("环绕增强 方法执行后");
//
//        return proceed;
//    }
//}
